<template>
	<div id="friend-merchant-manage" class="w-h-100 pos-r flex-1 apply-container" style="box-sizing: border-box; overflow: hidden">
		<div class="w-h-100 ver-flex pos-a" style="box-sizing: border-box; padding: 6px">
			<div class="search-s page-public-s" style="box-sizing: border-box">
				<el-card shadow="never" :body-style="{ paddingBottom: '0' }">
					<el-form class="box-f" ref="queryForm" :inline="true">
						<!-- <el-form-item label="事故名称：">
                            <el-input v-model="transferVal" placeholder="请输入事故名称" />
                        </el-form-item>
                        <el-form-item label="岗位：">
                            <el-select v-model="transferVal1" class="m-2" placeholder="请选择岗位">
                                <el-option v-for="item in options1" :key="item.value" :label="item.label"
                                    :value="item.value" />
                            </el-select>
                        </el-form-item> -->
						<el-form-item>
							<el-button v-if="$hasPer('emergencyResponseCard1:add')" @click="addNodeClick" icon="ele-Plus" type="primary"> 新增 </el-button>
							<el-button v-if="$hasPer('EmergencyDisposal4:excel')" @click="handleExport" icon="ele-Download"> 导出数据 </el-button>
						</el-form-item>
					</el-form>
				</el-card>
			</div>

			<div style="box-sizing: border-box" class="flex-1 pos-r">
				<div class="pos-a w-h-100" style="box-sizing: border-box">
					<el-card class="box-card w-h-100" shadow="never" style="margin-top: 16px">
						<div style="" class="w-h-100 ver-flex">
							<div class="flex-1 pos-r">
								<div class="pos-a w-h-100">
									<el-table  ref="excelRef" :data="list" class="w-h-100" style="width: 100%" border v-loading="loading" element-loading-background="rgba(0, 0, 0, 0.5)">
										<el-table-column type="index" label="序号" width="55" :show-overflow-tooltip="true" align="center" :index="indexMethod" />
										<el-table-column  min-width="120" :show-overflow-tooltip="true" label="岗位名称" align="center">
											<el-table-column min-width="120" :show-overflow-tooltip="true" align="center">
												<template #header>
													<SearchModel typeId="name" typeVal="select" @searchHandel="searchHandel" :basicsInfo="basicsInfo" />
												</template>
												<template #default="{ row }">
													{{ row.name }}
												</template>
											</el-table-column>
										</el-table-column>
										<el-table-column min-width="120" :show-overflow-tooltip="true" label="事故名称" align="center">
											<el-table-column min-width="120" :show-overflow-tooltip="true" align="center">
												<template #header>
													<SearchModel typeId="accidentName" typeVal="input" @searchHandel="searchHandel" :basicsInfo="basicsInfo" />
												</template>
												<template #default="{ row }">
													{{ row.accidentName }}
												</template>
											</el-table-column>
										</el-table-column>
										<el-table-column min-width="120" :show-overflow-tooltip="true" prop="createdTime" label="创建时间" align="center" />
										<el-table-column min-width="120" :show-overflow-tooltip="true" prop="createdUserName" label="创建人" align="center" />
										<el-table-column min-width="120" :show-overflow-tooltip="true" prop="updatedTime" label="更新时间" align="center" :formatter="formatDate" />
										<el-table-column min-width="120" :show-overflow-tooltip="true" prop="updatedUserName" label="更新人" align="center">
											<template #default="scope">
												<span v-if="scope.row.updatedUserName">{{ scope.row.updatedUserName }}</span>
												<span v-else> - </span>
											</template>
										</el-table-column>
										<el-table-column min-width="180" label="操作" align="center" fixed="right">
											<el-table-column min-width="180" align="center" fixed="right">
												<template #header>
													<el-button @click="searchClick" icon="ele-Search" type="primary" text> 查询 </el-button>
													<el-button @click="resetClick" icon="ele-Refresh" class="clear-bg" text> 重置 </el-button>
												</template>
												<template #default="scope">
													<div class="operate-s">
														<el-button @click="detailHandle(scope.row)" class="icon-e" icon="ele-View" size="small" text type="success"> 详情 </el-button>
														<el-button v-if="$hasPer('emergencyResponseCard2:edit')" @click="nodeClick(scope.row)" class="icon-e" icon="ele-Edit" size="small" text type="primary"> 编辑 </el-button>
														<el-button v-if="$hasPer('emergencyResponseCard3:delete')" @click="deleteHandle(scope.row.n_Id, getData)" class="icon-e" icon="ele-Delete" size="small" text type="danger">
															删除
														</el-button>
													</div>
												</template>
											</el-table-column>
										</el-table-column>
									</el-table>
								</div>
							</div>
							<div style="height: 30px; margin-top: 20px" class="hr-flex-start">
								<el-pagination
									v-model:currentPage="pageNo"
									v-model:page-size="pageSize"
									:total="totalRows"
									:page-sizes="[10, 20, 50, 100]"
									small
									background
									@size-change="handleSizeChange"
									@current-change="handleCurrentChange"
									layout="total, sizes, prev, pager, next, jumper"
									class="w-h-100"
								/>
							</div>
						</div>
					</el-card>
				</div>
			</div>
		</div>
		<!-- 新增and编辑 -->
		<el-dialog draggable :close-on-click-modal="false" :close-on-press-escape="false" v-model="showDialogVisible" :title="saveId ? '编辑' : '新增'" width="50%" @close="cancelUseClick">
			<el-form label-width="120px" ref="ruleFormRef" :model="ruleForm" size="default" :rules="rules">
				<el-divider content-position="left"> 基本信息 </el-divider>
				<el-row :gutter="35">
					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
						<el-form-item prop="accidentName" label="事故名称">
							<el-input v-model="ruleForm.accidentName" placeholder="事故名称" clearable />
						</el-form-item>
					</el-col>
					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
						<el-form-item prop="posId" label="岗位">
							<el-select v-model="ruleForm.posId" class="m-2" placeholder="请选择" style="width: 100%">
								<el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
							</el-select>
						</el-form-item>
					</el-col>
					<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
						<el-form-item prop="jobRiskFactors" label="岗位风险因素">
							<el-input type="textarea" v-model="ruleForm.jobRiskFactors" placeholder="岗位风险因素" clearable />
						</el-form-item>
					</el-col> -->
					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
						<el-form-item prop="part_Link_Process" label="部位/环节/过程">
							<el-input type="textarea" v-model="ruleForm.part_Link_Process" placeholder="部位/环节/过程" clearable />
						</el-form-item>
					</el-col>
					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
						<el-form-item prop="controlMeasures" label="控制措施">
							<el-input type="textarea" v-model="ruleForm.controlMeasures" placeholder="控制措施" clearable />
						</el-form-item>
					</el-col>
					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
						<el-form-item prop="emergencyMeasures" label="应急处置措施">
							<el-input type="textarea" v-model="ruleForm.emergencyMeasures" placeholder="应急处置措施" clearable />
						</el-form-item>
					</el-col>
				</el-row>
			</el-form>
			<template #footer>
				<span class="dialog-footer">
					<el-button @click="cancelUseClick">取消</el-button>
					<el-button type="primary" @click="controlUseClick(ruleFormRef, getData)">确定</el-button>
				</span>
			</template>
		</el-dialog>
		<!-- 查看详情 -->
		<el-dialog draggable :close-on-click-modal="false" :close-on-press-escape="false" v-model="showDetailDialogVisible" title="详情" width="50%" @close="cancelDetailClick">
			<div class="w-h-100" style="text-align: center">
				<h2 style="margin: 10px auto">岗位应急处置卡</h2>
				<table border="1" cellspacing="0" cellpadding="5">
					<thead>
						<tr>
							<th>事故名称</th>
							<th>岗位名称</th>
							<th>部位/环节/过程</th>
							<!-- <th>岗位风险因素</th> -->
							<th>控制措施</th>
							<th>应急处置措施</th>
						</tr>
					</thead>
					<tbody>
						<tr>
							<td>{{ tableData.accidentName }}</td>
							<td>{{ tableData.name }}</td>
							<td>{{ tableData.part_Link_Process }}</td>
							<!-- <td>{{ tableData.jobRiskFactors }}</td> -->
							<td>{{ tableData.controlMeasures }}</td>
							<td>{{ tableData.emergencyMeasures }}</td>
						</tr>
					</tbody>
				</table>
			</div>
		</el-dialog>
	</div>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue';
import getTableData from '/@/utils/getTableData';
import {
	getEmergencyDisposalCardDetailApi,
	deleteEmergencyDisposalCardApi,
	updateEmergencyDisposalCardApi,
	addEmergencyDisposalCardApi,
	getEmergencyDisposalCardApi,
	getPostDetailApiV2,
} from '/@/api/sms/HazardousChemicalsInterface';
import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
import SearchModel from '/@/views/sms/component/search-model.vue';
import { exportToExcel } from '/@/utils/exportToExcel';

/***** 变量 *****/
const transferVal = ref(); // 需要查询的值
const transferVal1 = ref(''); // 需要查询的值
const showDialogVisible = ref(false);
let searchObj: any = reactive({});

const ruleForm = reactive({
	accidentName: '',
	part_Link_Process: '',
	// jobRiskFactors: '',
	controlMeasures: '',
	emergencyMeasures: '',
	posId: null,
});
/***** searchClick 查询按钮 *****/
const searchClick = () => {
	// searchObj.AccidentName = transferVal.value
	// searchObj.PosId = transferVal1.value
	let newObj = Object.keys(searInfo.value);
	if (newObj.length !== 0) {
		newObj.map((i: any) => {
			searchObj[i] = searInfo.value[i];
		});
	}
};

/***** resetClick 重置按钮 *****/
const resetClick = () => {
	// transferVal.value = ""
	// transferVal1.value = ""
	searInfo.value = {};
	let newObj = Object.keys(searchObj);
	if (newObj.length !== 0) {
		newObj.map((i: any) => {
			searchObj[i] = '';
			// console.log(i);
		});
	}
	initInfoFun();
};

/***** addNodeClick 新增 *****/
const addNodeClick = async () => {
	showDialogVisible.value = true;
};

/***** nodeClick 编辑 *****/
const saveId = ref();
const nodeClick = async (row: any) => {
	console.log(row);
	if (row.n_Id) {
		getEmergencyDisposalCardDetailApi({ N_Id: row.n_Id }).then((res) => {
			ruleForm.accidentName = res.data.accidentName;
			ruleForm.part_Link_Process = res.data.part_Link_Process;
			// ruleForm.jobRiskFactors = res.data.jobRiskFactors;
			ruleForm.controlMeasures = res.data.controlMeasures;
			ruleForm.emergencyMeasures = res.data.emergencyMeasures;
			ruleForm.posId = res.data.posId;
		});
		saveId.value = row.n_Id;
	}
	showDialogVisible.value = true;
};

// 删除应急处置卡项
const deleteRow = (index: number) => {
	tableData.value.splice(index, 1);
};
//添加应急处置卡项
const onAddItem = () => {};

/*** deleteHandle 删除数据事件 */
const deleteHandle = async (val: String | Number, updateFun: Function) => {
	ElMessageBox.confirm('请确定删除此条数据', '提示', {
		confirmButtonText: '确定',
		cancelButtonText: '取消',
		type: 'warning',
	})
		.then(async () => {
			let param = { id: val };
			try {
				let res: any = await deleteEmergencyDisposalCardApi(param);
				if (res.success) {
					updateFun();
				}
			} catch (err) {
				return;
			}
		})
		.catch(() => {
			ElMessage({
				type: 'info',
				message: '删除失败',
			});
		});
};

/*** detailHandle 查看详情事件 */
const showDetailDialogVisible = ref(false);
const tableData = ref();
const detailHandle = async (item: any) => {
	const res = await getEmergencyDisposalCardDetailApi({ N_Id: item.n_Id });
	console.log(res);
	tableData.value = res.data;
	showDetailDialogVisible.value = true;
};
const cancelDetailClick = () => {
	showDialogVisible.value = false;
};

/*** cancelUseClick  弹窗取消事件 */
const cancelUseClick = () => {
	showDialogVisible.value = false;
	ruleForm.accidentName = '';
	ruleForm.part_Link_Process = '';
	// ruleForm.jobRiskFactors = '';
	ruleForm.controlMeasures = '';
	ruleForm.emergencyMeasures = '';
	ruleForm.posId = null;

	ruleFormRef.value!.resetFields();
};

/*** controlUseClick  弹窗提交事件 */
const controlUseClick = async (formEl: FormInstance | undefined, updateFun: Function) => {
	if (!formEl) return;
	await formEl.validate((valid, fields) => {
		if (valid) {
			if (saveId.value) {
				updateEmergencyDisposalCardApi({ ...ruleForm, id: saveId.value }).then((res) => {
					console.log(res);
					cancelUseClick();
					updateFun();
				});
			} else {
				addEmergencyDisposalCardApi(ruleForm).then((res) => {
					console.log(res);
					cancelUseClick();
					updateFun();
				});
			}
		} else {
			console.log('error submit!', fields);
		}
	});
};

/*** ruleFormRef  表单校验 */
const ruleFormRef = ref();
const rules = reactive({
	accidentName: [{ required: true, message: '内容不能为空', trigger: 'blur' }],
	part_Link_Process: [{ required: true, message: '内容不能为空', trigger: 'blur' }],
	// jobRiskFactors: [{ required: true, message: '内容不能为空', trigger: 'blur' }],
	controlMeasures: [{ required: true, message: '内容不能为空', trigger: 'blur' }],
	emergencyMeasures: [{ required: true, message: '内容不能为空', trigger: 'blur' }],
	posId: [{ required: true, message: '内容不能为空', trigger: 'blur' }],
});

/*** 初始化数据 */
const basicsInfo: any = ref([]);
const initInfoFun = () => {
	basicsInfo.value = [
		{
			typeId: 'accidentName', // 类型(不能为空，且唯一，与组件中typeId值对应) --- 必填
			typeNam: '', // 输入类型(number,text等) --- 选填
			searchVal: 'AccidentName', // 查询字段 --- 必填
			defaultVal: '', // 字段默认值 --- 选填
			placeholder: '事故名称', // placeholder数据
			defaultProp: options1.value, // 下拉框中使用，除下拉框外其它情况为空 --- 选填
			eventType: '', // 事件类型（如burl/change等） --- 选填
			defaultEvent: '', // 事件名称 --- 选填
		},
		{
			typeId: 'name', // 类型(不能为空，且唯一，与组件中typeId值对应) --- 必填
			typeNam: '', // 输入类型(number,text等) --- 选填
			searchVal: 'PosId', // 查询字段 --- 必填
			defaultVal: '', // 字段默认值 --- 选填
			placeholder: '岗位名称', // placeholder数据
			defaultProp: options1.value, // 下拉框中使用，除下拉框外其它情况为空 --- 选填
			eventType: '', // 事件类型（如burl/change等） --- 选填
			defaultEvent: '', // 事件名称 --- 选填
		},
	];
};

const searInfo: any = ref();
const searchHandel = (val: any) => {
	searInfo.value = val;
};

// 获取岗位
const options1: any = ref([]);

const myList = ref();
onMounted(async () => {
	const res = await getPostDetailApiV2();
	res.data.forEach((element: any) => {
		options1.value.push({
			label: element.name,
			value: element.id,
		});
	});
	const res9 = await getEmergencyDisposalCardApi({ pageNo: 1, pageSize: 9999 });
	myList.value = res9.data.rows;
	await initInfoFun();
});

/*** ================================= 导出数据函数操作 ================================= */
const excelRef: any = ref(null);
const handleExport = () => {
	if (excelRef.value) {
		if (excelRef.value.data.length !== 0) {
			let tableExcel: any = [];
			let tableArr = excelRef.value.data;
			tableArr.map((item: any) => {
				let tableObj: any = {};
				tableObj['岗位名称'] = item.name ? item.name : '-';
				tableObj['事故名称'] = item.accidentName ? item.accidentName : '-';

				tableObj['创建人'] = item.createdUserName ? item.createdUserName : '-';
				tableObj['创建时间'] = item.createdTime ? item.createdTime : '-';
				tableObj['更新人'] = item.updatedUserName ? item.updatedUserName : '-';
				tableObj['更新时间'] = item.updatedTime ? item.updatedTime : '-';
				tableExcel.push(tableObj);
			});
			exportToExcel(tableExcel, '应急处置卡.xlsx');
		} else {
			ElMessage({
				type: 'error',
				message: '暂无数据导出',
			});
		}
	}
};

/*** 截取日期格式方法 */
const formatDate = (row: any, column: any) => {
	// 获取单元格数据
	let data = row[column.property];
	if (data == null) {
		return '-';
	}
	if (data === '1900-01-01 00:00:00') {
		return '-';
	} else if (data === '0001-01-01 00:00:00') {
		return '-';
	}
	let dt = new Date(data);
	let month = dt.getMonth() + 1 < 10 ? '0' + (dt.getMonth() + 1) : dt.getMonth() + 1;
	let date = dt.getDate() < 10 ? '0' + dt.getDate() : dt.getDate();
	return dt.getFullYear() + '-' + month + '-' + date;
};


const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
	if (columnIndex === 1 || columnIndex === 2) { // 假设我们只合并姓名和事故名称列
  
  }

  return { rowspan: 1, colspan: 1 }; // 默认不合并
};


const { handleCurrentChange, pageSize, pageNo, handleSizeChange, totalRows, list, indexMethod, loading, getData } = getTableData(getEmergencyDisposalCardApi, {}, searchObj);
</script>
<style lang="scss">
@import '../style/public.scss';
</style>
<style scoped lang="scss">
#friend-merchant-manage {
	.box-f {
		:deep(.el-form-item__label) {
			padding: 0;
		}
	}

	:deep(.el-card__body) {
		height: 100%;
	}

	:deep(.el-card) {
		border: none !important;
	}

	.upload-demo {
		margin-left: 12px;
		margin-top: 2px;
	}

	ul {
		list-style: none;

		li {
			cursor: pointer;

			&:hover {
				color: red;
			}
		}
	}

	.icon-e {
		:deep(.el-icon) {
			margin-right: 0px !important;
		}
	}

	table {
		width: 100%;
		height: 100%;
		text-align: center;
		tr {
			height: 30px;
			line-height: 30px;
		}
	}
}
</style>
